#!/usr/bin/env python3
# _*_ coding:utf-8 _*_

#---------------------------------------------------题目1-----------------------------------------------------
import cv2 as cv
import numpy as np

#---------------------------------------------------题目2-----------------------------------------------------
#filename = r'D:\PycharmProjects\Test1\lena.jpg'      #当程序与图片不在一个路径下时，可指定路径
img = cv.imread("lena.png")                            #读入一个图片
cv.namedWindow("Hello,World!",cv.WINDOW_FREERATIO)    #创建一个窗口，自适应比例
cv.imshow('Hello,World!', img)                        #显示原图像

#---------------------------------------------------题目3-----------------------------------------------------
'''
#直接访问的方式分解BGR
B = img[:,:,0]
G = img[:,:,1]
R = img[:,:,2]
'''
#使用split函数分解BGR
(B,G,R) = cv.split(img)
#灰度值显示法显示BGR各分量
cv.namedWindow("Gray_Blue",cv.WINDOW_FREERATIO)    #创建一个窗口，自适应比例
cv.imshow('Gray_Blue', B)                          #灰度模式下显示B分量
cv.namedWindow("Gray_Green",cv.WINDOW_FREERATIO)
cv.imshow('Gray_Green', G)
cv.namedWindow("Gray_Red",cv.WINDOW_FREERATIO)
cv.imshow('Gray_Red', R)
#彩色显示法显示BGR各分量
zeros = np.zeros(img.shape[:2], dtype = "uint8")   #生成一个值为0的单通道数组
cv.namedWindow("Blue",cv.WINDOW_FREERATIO)         #创建一个窗口，自适应比例
cv.imshow("Blue", cv.merge([B, zeros, zeros]))     #彩色模式下显示B分量
cv.namedWindow("Green",cv.WINDOW_FREERATIO)
cv.imshow("Green", cv.merge([zeros, G, zeros]))
cv.namedWindow("Red",cv.WINDOW_FREERATIO)
cv.imshow("Red", cv.merge([zeros, zeros, R]))

#使用cvtColor将图片转换为HSV图并使用split函数分解HSV各分量
imgHSV = cv.cvtColor(img,cv.COLOR_BGR2HSV)
HSVChannels = cv.split(imgHSV)
#显示HSV各分量
cv.namedWindow("Hue",cv.WINDOW_FREERATIO)          #创建一个窗口，自适应比例
cv.imshow('Hue',HSVChannels[0])                    #显示Hue分量
cv.namedWindow("Saturation",cv.WINDOW_FREERATIO)
cv.imshow('Saturation',HSVChannels[1])             #显示Saturation分量
cv.namedWindow("Value",cv.WINDOW_FREERATIO)
cv.imshow('Value',HSVChannels[2])                  #显示Value分量

'''
#对图像进行高斯模糊、缩放、灰度化和阈值化
imgGauss = cv.GaussianBlur(img,(5,5),0)                          #高斯平滑
img1 = cv.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))  #原图像1/2
img2 = cv.pyrDown(img1)                                          #原图像1/4
imgGray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)                     #灰度化
_,imgGray1 = cv.threshold(imgGray,120,0xff,cv.THRESH_BINARY)     #阈值化

cv.imshow('Gaussian filtered image', imgGauss)
cv.imshow('Half size', img1)
cv.imshow('Quarter size', img2)
cv.imshow('Gray image', imgGray)
cv.imshow('Threshold image', imgGray1)
'''

cv.waitKey()
cv.destroyAllWindows()